package com.tx.framework.util;

import java.util.List;

import com.tx.framework.exception.CheckedException;


/**
 * 参数检查
 * 
 * @author Administrator
 *
 */
public class ParameterValidate {

	/**
	 * 判断字符串必须为大于0的整数
	 * 
	 * @param parameterValue
	 *            参数值
	 * @param parameterMemo
	 *            参数说明
	 */
	public static void mustGreatThenZero(Object parameterValue,
			String parameterMemo) {
		if (parameterValue == null || parameterValue.toString().equals("")) {
			throw new CheckedException(parameterMemo + "不能为空");
		}
		if (!StringUtil.isInt(parameterValue.toString())) {
			throw new CheckedException(parameterMemo + "必须为整数");
		}
		if (Integer.parseInt(parameterValue.toString()) <= 0) {
			throw new CheckedException(parameterMemo + "必须大于0");
		}
	}
	
	/**
	 * 判断字符串必须为大于或等于0的整数
	 * @param parameterValue 参数值
	 * @param parameterMemo 参数说明
	 */
	public static void mustGreatThenOrEqualsZero(Object parameterValue,
			String parameterMemo) {
		if (parameterValue == null || parameterValue.toString().equals("")) {
			throw new CheckedException(parameterMemo + "不能为空");
		}
		if (!StringUtil.isInt(parameterValue.toString())) {
			throw new CheckedException(parameterMemo + "必须为整数");
		}
		if (Integer.parseInt(parameterValue.toString()) < 0) {
			throw new CheckedException(parameterMemo + "必须大于或等于0");
		}
	}

	/**
	 * 判断字符串必须不超过指定长度小数位数字(不判断是否大于，小于，等于0)
	 * @param parameterValue 参数值
	 * @param parameterMemo 参数说明
	 * @param decimalNumber 允许的小数位长度
	 */
	public static void mustSpecialDecimal(Object parameterValue,
			String parameterMemo,Integer decimalLength){
		if (parameterValue == null || parameterValue.toString().equals("")) {
			throw new CheckedException(parameterMemo + "不能为空");
		}
		String value=parameterValue.toString();
		if(value.contains(".")){
			String lastValue=value.substring(value.lastIndexOf('.')+1);
			if(lastValue.length()>decimalLength){
				throw new CheckedException(parameterMemo + "只支持"+decimalLength+"位小数");
			}
		}
		if(!StringUtil.isDecimal(value)){
			throw new CheckedException(parameterMemo + "不是有效的数字");
		}
	}
	
	/**
	 * 判断字符串必须不为空
	 * 
	 * @param parameterValue
	 *            参数值
	 * @param parameterMemo
	 *            参数说明
	 */
	public static void mustNotNull(Object parameterValue, String parameterMemo) {
		if (parameterValue == null || parameterValue.toString().equals("")) {
			throw new CheckedException(parameterMemo + "不能为空");
		}
	}

	/**
	 * 判断list不能为空
	 * 
	 * @param parameterList
	 *            list
	 * @param parameterMemo
	 *            参数说明
	 */
	public static void mustNotNull(List<Object> parameterList,
			String parameterMemo) {
		if (parameterList == null || parameterList.size() == 0) {
			throw new CheckedException(parameterMemo + "不能为空");
		}
	}

	/**
	 * 判断日期类型必须为标准类型：yyyy-MM-dd ,egg:2022-05-18
	 * 
	 * @param strDate
	 *            日期值
	 * @param dateMemo
	 *            日期说明
	 */
	public static void mustIsDate(Object strDate, String dateMemo) {
		if (strDate == null || strDate.toString().equals("")) {
			throw new CheckedException(dateMemo + "不能为空");
		}
		if (!DateUtil.isDateYYYYMMDD(strDate.toString())) {
			throw new CheckedException(dateMemo + "必须为标准日期格式[yyyy-MM-dd]");
		}
	}
}
